package fr.bitstrip.sitn.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import fr.bitstrip.sitn.dao.ImageFond_MotCleDAO;
import fr.bitstrip.sitn.dao.MotCleDAO;
import fr.bitstrip.sitn.model.MotCle;
import fr.bitstrip.sitn.validator.MotCleValidator;


@Controller
public class MotCleController {
    @Autowired
    private ImageFond_MotCleDAO imagefond_MotCleDAO;
	@Autowired
	private MotCleDAO motCleDAO;
	@Autowired
	private MotCleValidator motCleValidator;
	
	
	@RequestMapping(method = RequestMethod.GET, value="gerer_mot_cle")
	public String afficherMotCle(ModelMap model, @RequestParam(value="id", required = false) String id){
		/* L'utilisateur clique sur un mot cl� pour le modifier. 
		  R�cup�ration des informations sur le mot cl� et redirection vers la page de modification.*/
		if(id != null){
			model.addAttribute("motCle", motCleDAO.findMotCleById(id));
		    return "modification_mot_cle";
		} // R�cup�ration de la liste des mots cl�s afin de l'afficher
		else{
			model.addAttribute("listeMotsCles", motCleDAO.get());				
			return "gerer_mot_cle";
		}
	}
	
	// Cr�ation d'un nouveau mot cl� (vide) et redirection vers le formulaire d'ajout.
	@RequestMapping(method=RequestMethod.GET, value="/ajouter_mot_cle")
	public String ajouterMotCle(ModelMap model) {
		model.addAttribute("motCle", new MotCle()); 
		return "ajouter_mot_cle";
	}
	
	//Enregistrement des modifications du mot cl�
	@RequestMapping(params="valider=Modifier", method=RequestMethod.POST, value="gerer_mot_cle")
	public String modifier(ModelMap model, @ModelAttribute("motCle") MotCle motCle,BindingResult result, RedirectAttributes redirectAttributes){
		//Valider que le mot cl� est correct (ni vide, ni d�j� existant)
		motCleValidator.validate(motCle, result);
		model.addAttribute("status", result);	
		if (result.hasErrors()){ //En cas d'erreur
			return "modification_mot_cle";
		}else{ // Sinon, modifier
			motCleDAO.modifier(motCle);
			redirectAttributes.addFlashAttribute("modifier", "true");
			return "redirect:gerer_mot_cle.action";
		}	
	}
	
	//Suppression des mots cl�s
	@RequestMapping(params="valider=Supprimer", method=RequestMethod.POST, value="gerer_mot_cle")
	public String supprimer(ModelMap model, @RequestParam(value="check",required=false) String[] check, RedirectAttributes redirectAttributes){
		if(check!=null){ // Si on a coch� au moins un mot cl�
			for(int i=0; i< check.length; i++){
				MotCle motCle = motCleDAO.findMotCleById(check[i]);
				// Si le mot cl� est d�j� utilis� dans une image de fond, on emp�che sa supression (message � l'utilisateur)
				if (imagefond_MotCleDAO.findMotCleImageFond(motCle).size() != 0){ 
					redirectAttributes.addFlashAttribute("supprimerLiaison", "true");
				}else{ // Sinon, supprimer
					motCleDAO.supprimer(motCle);
					redirectAttributes.addFlashAttribute("supprimerVide", "false");
				}
			}
		}else{// Si aucun mot cl� n'est s�lectionn�, affiche un message � l'utilisateur
			redirectAttributes.addFlashAttribute("supprimerVide", "true");
		}
		return "redirect:gerer_mot_cle.action";	
	}
	

	//Recherche mot cl�
	@RequestMapping(method=RequestMethod.POST, value="/recherche")
	public String validation(ModelMap model,@RequestParam(value="search",required=true) String search ){ 
			model.addAttribute("rechercheMotsCles" ,motCleDAO.findMotCle(search) );
			return "resultatRecherche";	
	}


	//Ajout  d'un mot cl�
	@RequestMapping(method=RequestMethod.POST, value="/ajouter_mot_cle")
	public String newUserValidation(ModelMap model, @ModelAttribute("motCle") MotCle motCle, BindingResult result, RedirectAttributes redirectAttributes) {
		//Valider que le mot cl� est correct (ni vide, ni d�j� existant)
		motCleValidator.validate(motCle, result);
		model.addAttribute("status", result);		
		if (result.hasErrors()){ // En cas d'erreur
			return "ajouter_mot_cle";
		}else{ //Sinon, ajouter
			motCleDAO.ajouter(motCle);
			redirectAttributes.addFlashAttribute("ajouterVide", "false");
			return "redirect:gerer_mot_cle"; 
		} 
	}	
}
